<?php

namespace Biz\tools;

use Doraemon\tools\Curl;
use Doraemon\tools\Log;
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

class ShenJian
{
    const API_URL = 'https://api.wangduoyun.com/?appid=2d2a35a1eee6dd500823c592ea792cf2';

    const API_GOODS_INFO_SUCCESS = 0;

    /**
     * @param $url
     * @return bool
     * 接口返回码
     * 0代表调用成功，其他代表调用失败；
     * 101代表没有该用户；102代表签名错误；
     * 103代表AIP不存在；104代表调用太频繁；
     * 105代表请求并发数超过限制；110代表可调用次数不足；
     * 111代表请求IP不在白名单中；
     * 112代表当前账户余额为负或代表验证码扣费失败，请查看余额；
     * 113代表用户自定义退出；114代表没有返回数据；
     * 500代表其他错误类型，具体原因请看返回结果的错误原因。
     */
    public static function getGoodsInfo($url)
    {
        $urlHost = parse_url($url, PHP_URL_HOST);
        if ($urlHost == 'item.taobao.com') {
            try {
                $client = new Client();
                $response = $client->get($url, [
                    'allow_redirects' => false
                ]);
                $redirUrl = $response->getHeaderLine('location');
                if ($redirUrl) {
                    $urlInfo = parse_url($redirUrl);
                    if ($urlInfo['host'] == 'item.taobao.com' && $urlInfo['path'] == '/auction/noitem.htm') {
                        Log::wiki_scraper_debug('商品已删除', [
                            $url
                        ]);
                        return false;
                    }
                }
            } catch (\Exception $e) {
                Log::wiki_scraper_error('请求淘宝失败', [
                    $e,
                    $url
                ]);
            }
        }
        Curl::$defaultConfig[RequestOptions::TIMEOUT] = 120;
        $result = Curl::Request('POST', self::API_URL, ['form_params' => ['scanUrl' => $url]]);
        if ($result['code'] == Curl::CURL_REQUEST_SUCCESS) {
            if ($result['json']['error_code'] == self::API_GOODS_INFO_SUCCESS) {
                Log::wiki_scraper_info($result['json']['error_code'] . $result['json']['reason'], [
                    $url,
                    $result
                ]);
                return $result['json']['data']['product_details'];
            } else {
                Log::wiki_scraper_debug($result['json']['error_code'] . $result['json']['reason'], [
                    $url,
                    $result
                ]);
                return false;
            }
        } else {
            Log::wiki_scraper_debug('result不正确#', [
                $url,
                $result
            ]);
            return false;
        }
    }
}